go语言开发cmdb资产管理系统,对接kubernetes、云平台、gitlab、Prometheus 您所在的位置:网站首页 k8s cicd 开源 go语言开发cmdb资产管理系统,对接kubernetes、云平台、gitlab、Prometheus

go语言开发cmdb资产管理系统,对接kubernetes、云平台、gitlab、Prometheus

#go语言开发cmdb资产管理系统,对接kubernetes、云平台、gitlab、Prometheus| 来源: 网络整理| 查看: 265

go语言开发cmdb资产管理系统,对接kubernetes、云平台、gitlab、Prometheus 精选 原创

Cosmic杰 2022-03-13 21:21:57 ©著作权

文章标签 golang-cmdb cloudplatform CICD prometheus 文章分类 Go语言 后端开发

©著作权归作者所有:来自51CTO博客作者Cosmic杰的原创作品,请联系作者获取转载授权,否则将追究法律责任

基于beego-v1.12.3框架开发,这里仅对cmdb一些功能展示、deployment资源的操作核心代码展示; 源码已托管至github:https://github.com/CosmicBDry/gocmdb.git

一.CMDB操作k8s集群 1.cmdb创建deployment资源 1) CMDB的登录界面

image.png

2)控制器菜单选择

image.png

3)点击新建按钮,新建deployment项目,填写部署表单

image.png

4)创建后结果如下

image.png

5)k8s集群后端验证已创建成功

image.png

2.对deployment资源的实时更新 1)点击配置按钮,对如下pod副本数进行调整

image.png

2)查看调整后的副本数

image.png

3)后端验证pod的副本数

image.png

3.deployment资源的删除操作 1)点击删除按钮,弹出确认删除提示

image.png

2)删除成功操作

image.png

3)后端验证是否删除

image.png

4.CMDB操作deployment资源核心代码展示 1)k8s的SDK相关的包导入 package models import ( "context" "time" appV1 "k8s.io/api/apps/v1" coreV1 "k8s.io/api/core/v1" metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" kubeAppV1 "k8s.io/client-go/kubernetes/typed/apps/v1" "k8s.io/client-go/tools/clientcmd" ) 2)定义一个deployment结构体类型,用于获取接收deployment资源数据 type DeploymentInstace struct { Name string `json:"app_name" form:"name"` NameSpace string `json:"namespace" form:"namespace"` CreationTimestamp time.Time `json:"created_time"` RevisionHistoryLimit int32 `json:"revision_history_limit" form:"historyVersionLimit"` Replicas int32 `json:"replicas" form:"replicas"` AvailableReplicas int32 `json:"available_replicas"` Labels map[string]string `json:"-" form:"labels"` ContainerName string `form:"containerName"` ImgUrl string `form:"imageUrl"` ContainerPortName string `json:"-"form:"containerPortName"` ContainerPort int32 `form:"containerPort"` HostPort int32 `form:"hostPort"` } 3)调用k8s的api接口获取指定名称空间的deployment资源的数据 func DeploymentInstanceGet(kubeconfig,namespace,deploymentName string) (*DeploymentInstace,error){ //通过kubeconfig集群认证文件生成一个客户端操作对象clientset clientset,err:=ClienSet(kubeconfig) if err !=nil{ return nil,err } //创建一个deployment资源的接口对象DeploymentClient,用于操作指定名称空间的deployment资源 DeploymentClient:=clientset.AppsV1().Deployments(namespace) //调用接口对象DeploymentClient中的Get方法,获取相应的deployment资源数据 deploymentInstance,err:=DeploymentClient.Get(context.TODO(),deploymentName,metaV1.GetOptions{}) if err !=nil{ return nil,err } //return返回指针类型的deployment结构体类型的实例 return &DeploymentInstace{ Name: deploymentInstance.Name, NameSpace: deploymentInstance.Namespace, CreationTimestamp: deploymentInstance.CreationTimestamp.Time, RevisionHistoryLimit: *deploymentInstance.Spec.RevisionHistoryLimit, Replicas: *deploymentInstance.Spec.Replicas, AvailableReplicas: deploymentInstance.Status.AvailableReplicas, Labels: deploymentInstance.Spec.Selector.MatchLabels , ContainerName: deploymentInstance.Spec.Template.Spec.Containers[0].Name, ImgUrl: deploymentInstance.Spec.Template.Spec.Containers[0].Image, ContainerPortName: deploymentInstance.Spec.Template.Spec.Containers[0].Ports[0].Name , ContainerPort: deploymentInstance.Spec.Template.Spec.Containers[0].Ports[0].ContainerPort , HostPort: deploymentInstance.Spec.Template.Spec.Containers[0].Ports[0].HostPort, },nil } 4)在集群中创建一个deployment控制器实例 func DeploymentInstanceCreate(kubeconfig string,deployment *DeploymentInstace)error{ //定义deployment资源的创建清单,类似k8s中通过创建yaml清单来部署集群资源 deploymentInstance := &appV1.Deployment{ TypeMeta: metaV1.TypeMeta{ //定义deployment资源的apiVersion、kind类型等 Kind: "Deployment", APIVersion: "apps/v1", }, ObjectMeta: metaV1.ObjectMeta{ //定义控制器的metadata:名称、namespace、labels等 Name: deployment.Name, Namespace: deployment.NameSpace, Labels: deployment.Labels, }, Spec: appV1.DeploymentSpec{ //定义deployment控制器的spec字段 Replicas: &deployment.Replicas, Selector: &metaV1.LabelSelector{ MatchLabels: deployment.Labels, }, RevisionHistoryLimit: &deployment.RevisionHistoryLimit, Template: coreV1.PodTemplateSpec{ ObjectMeta: metaV1.ObjectMeta{ //Name: "golang-pod", Labels: deployment.Labels, }, Spec: coreV1.PodSpec{ Containers: []coreV1.Container{ coreV1.Container{ Name: deployment.ContainerName, Image: deployment.ImgUrl, ImagePullPolicy: coreV1.PullIfNotPresent, Ports: []coreV1.ContainerPort{ coreV1.ContainerPort{ Name: deployment.ContainerPortName, ContainerPort: deployment.ContainerPort, HostPort: deployment.HostPort, Protocol: coreV1.ProtocolTCP, }, }, }, }, }, }, }, } clientset,err:=ClienSet(kubeconfig) if err !=nil{ return err } DeploymentClient:=clientset.AppsV1().Deployments(deployment.NameSpace) //调用DeploymentClient接口中的create方法,创建deployment资源 _, err = DeploymentClient.Create(context.TODO(), deploymentInstance, metaV1.CreateOptions{}) if err !=nil{ return err } return nil } 5)deployment资源更新 func DeploymentInstanceModify(kubeconfig string,newDeploymentInstance *DeploymentInstace)error{ clientset,err:=ClienSet(kubeconfig) if err !=nil{ return err } DeploymentClient:=clientset.AppsV1().Deployments(newDeploymentInstance.NameSpace) deploymentInstance,err:=DeploymentClient.Get(context.TODO(),newDeploymentInstance.Name,metaV1.GetOptions{}) if err !=nil{ return err } deploymentInstance.Spec.Replicas= &newDeploymentInstance.Replicas deploymentInstance.Spec.RevisionHistoryLimit =&newDeploymentInstance.RevisionHistoryLimit deploymentInstance.Spec.Template.Spec.Containers[0].Image= newDeploymentInstance.ImgUrl deploymentInstance.Spec.Template.Spec.Containers[0].Ports[0].ContainerPort = newDeploymentInstance.ContainerPort deploymentInstance.Spec.Template.Spec.Containers[0].Ports[0].HostPort = newDeploymentInstance.HostPort //调用DeploymentClient接口对象中的update方法,来更新deployment资源 _,err=DeploymentClient.Update(context.TODO(),deploymentInstance,metaV1.UpdateOptions{}) if err !=nil{ return err } return nil } 二.对接腾讯云、阿里云等云平台 1.以下实现是通过调用腾讯云、阿里云自带的api接口(SDK),将云平台注册到CMDB系统

image.png

2.调用云平台api抓取到的实例信息,以及对实例的简单操作

image.png

三.CMDB接收prometheus告警通知、job监控节点的配置 1.alertmanager告警通知

image.png

2.通过CMDB配置prometheus.yml主配置文件,添加或删除job

image.png

四.CMDB实现CICD流程(结合gitlab、shell脚本或ansible) 1.发布管理菜单

image.png

2.通过gitlab的webhook事件触发,发生代码提交,会自动注册最新提交的项目到cmdb系统,如下可查看项目提交相关信息

image.png

3.发布管理配置,配置master节点、后端发布节点、CICD功能的启用或禁用(生产建议禁用CICD)

image.png

4.查看构建记录文件,通过shell实现对go代码的构建编译

image.png

收藏 评论 分享 举报

上一篇:k8s集群中部署jenkins、gitlab、nexus实现CICD



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有